package DAO;

import VO.AgendamentoVO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import model.Agendamento;

/**
 *
 * @author Giovana
 */
public class AgendamentoDAO {
    ConectaBanco conexao = new ConectaBanco();
    Connection con;
    PreparedStatement pre;
    
    public void registrarAgendamento(Agendamento ag){
        try{
            con = conexao.obterConexao();
            String sql = "insert into agendamentos "+
                         "(croDentista, codPaciente, dataConsulta, horaConsulta, minutoConsulta, status) values (?,?,?,?,?,?)";                    
            pre = con.prepareStatement(sql);
            pre.setInt(1, ag.getCroDentista());
            pre.setInt(2, ag.getCodPaciente());
            // convertendo de java.util.date para java.sql.date, para que a data possa ser gravada no banco
            pre.setDate(3, new java.sql.Date (ag.getData().getTime()));
            pre.setInt(4, ag.getHora());
            pre.setInt(5, ag.getMinuto());
            pre.setInt(6, 0);
            System.out.println(pre);
            pre.executeUpdate();
            JOptionPane.showMessageDialog(null, "Agendamento realizado com sucesso!!!");
            
        }catch(Exception e){
            System.out.println("AgendamentoDAO"+e.getMessage());
        }
        
    }
    
    public ArrayList<AgendamentoVO> obterAgendamentos(){
        ArrayList<AgendamentoVO> listaAgendamentos = new ArrayList();
        try{
            con = conexao.obterConexao();
            String sql = "select agendamentos.codAgendamento, "
                    + "agendamentos.dataConsulta, "
                    + "agendamentos.horaConsulta, "
                    + "agendamentos.minutoConsulta, "
                    + "dentistas.cro, dentistas.nome as nomeDentista, "
                    + "pacientes.codPaciente, "
                    + "pacientes.nome as nomePaciente from"
                    + " agendamentos, dentistas, pacientes where dentistas.cro = agendamentos.croDentista"
                    + " and pacientes.codPaciente = agendamentos.codPaciente"
                    + " and agendamentos.status=0";
            pre = con.prepareStatement(sql);
            ResultSet rs;
            rs = pre.executeQuery();
            
            //cada linha(registro) resultado da consulta sql, será armazenado
            //em um objeto AgendamentoVO, que por sua vez será adicionado em um ArrayList
            
            while(rs.next()){
                AgendamentoVO agVO = new AgendamentoVO();
                agVO.setCodAgendamento(rs.getString("codAgendamento"));
                agVO.setDataConsulta(rs.getString("dataConsulta"));
                agVO.setHoraConsulta(rs.getString("horaConsulta") + ":" + rs.getString("minutoConsulta"));
                agVO.setCroDentista(rs.getString("cro"));
                agVO.setNomeDentista(rs.getString("nomeDentista"));
                agVO.setCodPaciente(rs.getString("codPaciente"));
                agVO.setNomePaciente(rs.getString("nomePaciente"));
                listaAgendamentos.add(agVO);
            }
        } catch (Exception e)
        {
            System.out.println("Erro:" + e.getMessage());
        }
        
        return listaAgendamentos;
        
    }
    
    //criação do metodo main para testar o metodo obterAgendamento()
    public static void main(String arg[]){
        AgendamentoDAO agDAO = new AgendamentoDAO();
        ArrayList<AgendamentoVO> listaAgendamentos = agDAO.obterAgendamentos();
        for (AgendamentoVO a: listaAgendamentos){
            System.out.println("---------");
            System.out.println(a.getCodAgendamento());
            System.out.println(a.getNomeDentista());
            System.out.println(a.getDataConsulta());
        }
     }
    
    public void atualizarConsulta(Agendamento ag){
        try{
            con = conexao.obterConexao();
            String sql = "update agendamentos set status=1 where codAgendamento=?";
            pre = con.prepareStatement(sql);
            pre.setInt(1, ag.getCodAgendamento());
            System.out.println("Comando SQL formado: "+ pre);
            int r = pre.executeUpdate();
            if(r>0){
                JOptionPane.showMessageDialog(null, "Consulta Atualizada");
            }
            else{
                JOptionPane.showMessageDialog(null, "Consulta não Localizada");
            }
        }
        catch(SQLException e){
            System.out.println("Erro" + e.getMessage());
        }
    }
    
    public void alterarConsulta(Agendamento ag){
        try{
            //alterando os campos nome, especialidade de um registro da tabela
            //dentista conforme um CRO que foi informado
            String sql = "update agendamentos set croDentista=?, codPaciente=?, dataConsulta=?, horaConsulta=?, minutoConsulta=?, status=? where codAgendamento=?";
            pre = con.prepareStatement(sql);
            pre.setInt(1, ag.getCroDentista());
            pre.setInt(2, ag.getCodPaciente());
            // convertendo de java.util.date para java.sql.date, para que a data possa ser gravada no banco
            pre.setDate(3, new java.sql.Date (ag.getData().getTime()));
            pre.setInt(4, ag.getHora());
            pre.setInt(5, ag.getMinuto());
            pre.setInt(6, 0);
            pre.setInt(7, ag.getCodAgendamento());
            System.out.println(pre);
            pre.executeUpdate();
            JOptionPane.showMessageDialog(null, "Agendamento alterado com sucesso!!!");
        }
        catch(SQLException e){
            System.out.println("Erro" + e.getMessage());
        }
    }
    
    
}
